import numpy as np 
from scipy.interpolate  import CubicSpline 
import matplotlib.pyplot  as plt 
 
# 示例数据 
x = np.array([0,  2, 4, 6, 8])
y = np.array([1,  3, 5, 4, 2])
 
# 三次样条插值（自然边界条件）
cs = CubicSpline(x, y, bc_type='natural')
 
# 生成拟合曲线 
x_new = np.linspace(x.min(),  x.max(),  100)
y_new = cs(x_new)
 
# 绘制结果 
plt.plot(x,  y, 'o', label='原始数据')
plt.plot(x_new,  y_new, '-', label='三次样条拟合')
plt.legend() 
plt.xlabel('x') 
plt.ylabel('y') 
plt.show() 